/**
 * @author Hermann D. Schimpf
 * @author SCHIMPF - Sistemas de Informacion y Gestion
 * @version Apr 16, 2011 12:23:04 AM
 */
package org.schimpf.sql.base;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Interfaz con los metodos basicos de consultas SQL
 * 
 * @author Hermann D. Schimpf
 * @author SCHIMPF - Sistemas de Informacion y Gestion
 * @version Apr 16, 2011 12:23:04 AM
 */
public interface SQLBasics {
	/**
	 * Ejecuta una consulta SQL
	 * 
	 * @author Hermann D. Schimpf
	 * @author SCHIMPF - Sistemas de Informacion y Gestion
	 * @version Apr 16, 2011 12:24:02 AM
	 * @return True si la consulta se ejecuto exitosamente
	 */
	public boolean executeQuery();

	/**
	 * Ejecuta una consulta SQL
	 * 
	 * @author <FONT style='color:#55A; font-size:12px; font-weight:bold;'>Hermann D. Schimpf</FONT>
	 * @author <B>SCHIMPF</B> - <FONT style="font-style:italic;">Sistemas de Informaci&oacute;n y Gesti&oacute;n</FONT>
	 * @author <B>Schimpf.NET</B>
	 * @version Oct 13, 2012 9:42:33 PM
	 * @param query Consulta a ejecutar
	 * @return True si la consulta se ejecuto exitosamente
	 */
	public boolean executeQuery(final PreparedStatement query);

	/**
	 * Ejecuta una consulta SQL de actualizacion
	 * 
	 * @author Hermann D. Schimpf
	 * @author SCHIMPF - Sistemas de Informacion y Gestion
	 * @version Mar 15, 2012 13:51:02 AM
	 * @return Numero de actualizaciones, -1 si dio error
	 */
	public int executeUpdate();

	/**
	 * Ejecuta una consulta SQL de actualizacion
	 * 
	 * @author <FONT style='color:#55A; font-size:12px; font-weight:bold;'>Hermann D. Schimpf</FONT>
	 * @author <B>SCHIMPF</B> - <FONT style="font-style:italic;">Sistemas de Informaci&oacute;n y Gesti&oacute;n</FONT>
	 * @author <B>Schimpf.NET</B>
	 * @version Oct 13, 2012 9:47:38 PM
	 * @param query Consulta SQL
	 * @return Numero de actualizaciones, -1 si dio error
	 */
	public int executeUpdate(final PreparedStatement query);

	/**
	 * Retorna el resultado de la consulta ejecutada
	 * 
	 * @author Hermann D. Schimpf
	 * @author SCHIMPF - Sistemas de Informacion y Gestion
	 * @version Apr 16, 2011 12:24:23 AM
	 * @return ResultSet de la consulta ejecutada
	 */
	public ResultSet getResultSet();

	/**
	 * Retorna si existe mas registros
	 * 
	 * @author Hermann D. Schimpf
	 * @author SCHIMPF - Sistemas de Informacion y Gestion
	 * @version Apr 16, 2011 1:26:48 AM
	 * @return True si hay mas registros
	 */
	public boolean hasNext();

	/**
	 * Retorna la consulta
	 * 
	 * @author <FONT style='color:#55A; font-size:12px; font-weight:bold;'>Hermann D. Schimpf</FONT>
	 * @author <B>SCHIMPF</B> - <FONT style="font-style:italic;">Sistemas de Informaci&oacute;n y Gesti&oacute;n</FONT>
	 * @author <B>Schimpf.NET</B>
	 * @version Oct 13, 2012 9:08:56 PM
	 * @param query Consulta SQL
	 * @return Consulta
	 * @throws SQLException Si ocurre un error en la base de datos o si la conexion esta cerrada
	 */
	public PreparedStatement prepareStatement(final String query) throws SQLException;

	/**
	 * Retorna la consulta
	 * 
	 * @author <FONT style='color:#55A; font-size:12px; font-weight:bold;'>Hermann D. Schimpf</FONT>
	 * @author <B>SCHIMPF</B> - <FONT style="font-style:italic;">Sistemas de Informaci&oacute;n y Gesti&oacute;n</FONT>
	 * @author <B>Schimpf.NET</B>
	 * @version Oct 13, 2012 9:57:18 PM
	 * @param query Consulta
	 * @param autoGeneratedKeys Tipo de retorno de claves
	 * @return Consulta
	 * @throws SQLException Si ocurre un error en la base de datos o si la conexion esta cerrada
	 */
	public PreparedStatement prepareStatement(final String query, final int autoGeneratedKeys) throws SQLException;
}